package cn.yangsen.simplebeanmanager.engine;

import java.lang.reflect.Field;
import java.util.List;

import cn.yangsen.simplebeanmanager.annotation.Resume;
import cn.yangsen.simplebeanmanager.bean.html.A;
import cn.yangsen.simplebeanmanager.bean.html.Element;
import cn.yangsen.simplebeanmanager.bean.html.Label;
import cn.yangsen.simplebeanmanager.bean.html.Table;
import cn.yangsen.simplebeanmanager.bean.html.Td;
import cn.yangsen.simplebeanmanager.bean.html.Tr;
import cn.yangsen.simplebeanmanager.tool.ReflectTool;

public class 展示用概要信息表格生成器 extends 展示用表格生成器
{
	@Override
	public Table 生成标题栏在上方的表格(Class<?> 对象的类型, Iterable<?> 对象集合)
	{
		Field[] 属性集合 = ReflectTool.获取类及其父类所有属性(对象的类型);
		if (属性集合 == null)
		{
			return null;
		}
		for (Field field : 属性集合)
		{
			if (!field.isAnnotationPresent(Resume.class))
			{
				添加不显示的属性(field);
			}
		}
		return super.生成标题栏在上方的表格(对象的类型, 对象集合);
	}

	/**
	 * @param 对象的类型
	 * @param 对象集合
	 * @param 超链接列表 添加到表格最后一列
	 * @return
	 */
	public Table 生成标题栏在上方的表格(Class<?> 对象的类型, Iterable<?> 对象集合, List<A> 超链接列表)
	{
		Table 表格 = 生成标题栏在上方的表格(对象的类型, 对象集合);
		if (表格 != null)
		{
			Tr[] 所有行 = 表格.getTrs();
			Td 标题列 = new Td();
			所有行[0].add(标题列);
			标题列.add(new Label("操作"));
			if (对象集合 != null)
			{
				int i = 1;
				for (Object object : 对象集合)
				{
					Td td = new Td();
					所有行[i].add(td);
					for (A a : 超链接列表)
					{
						A copyA = a.clone();
						String href = copyA.getHref();
						href = 填充动态值(href, object);
						copyA.setHref(href);
						td.add(copyA);
					}
					i++;
				}
			}
		}
		return 表格;
	}

	private String 填充动态值(String href, Object 对象)
	{
		int i = href.indexOf("${");
		if (i < 0)
		{
			return href;
		}
		int j = href.indexOf("}");
		if (j < 0)
		{
			return href;
		}

		String 属性名 = href.substring(i + 2, j);

		Object 值 = ReflectTool.获取对象的属性值(对象, 属性名);
		if (值 != null)
		{
			href = href.replace("${" + 属性名 + "}", 值.toString());
		}
		href = href.replace("${" + 属性名 + "}", "");

		return 填充动态值(href, 对象);
	}

	@Override
	protected Element[] 处理String属性值(Field 属性, Object 值)
	{
		Element[] 结果 = new Element[1];
		if (值 != null)
		{
			Label 文本 = new Label();
			结果[0] = 文本;

			String s = (String) 值;
			Resume 摘要 = 属性.getAnnotation(Resume.class);
			if (摘要 != null)
			{
				int 显示长度 = 摘要.lenght();
				if (显示长度 < s.length())
				{
					文本.setTitle(s);
					s = s.substring(0, 显示长度) + "...";
				}
			}
			文本.setContent(s);
		}
		return 结果;
	}
}
